return function()
  require("lspsaga").setup {
    -- https://dev.neovim.pro/lspsaga/callhierarchy/
    callhierarchy = {
      layout = "float",
      keys = {
        edit = "e",
        vsplit = "v",
        split = "s",
        tabe = "t",
        quit = "q",
        shuttle = "[]",
        toggle_or_req = "u",
        close = "<Esc>",
      },
    },
    -- https://dev.neovim.pro/lspsaga/codeaction/
    code_action = {
      num_shortcut = true,
      show_server_name = true,
      extend_gitsigns = false,
      keys = {
        quit = "q",
        exec = "<CR>",
      },
    },
    -- https://dev.neovim.pro/lspsaga/definition/
    definition = {
      width = 0.6,
      height = 0.5,
      keys = {
        edit = "<C-c>o",
        vsplit = "<C-c>v",
        split = "<C-c>s",
        tabe = "<C-c>t",
        quit = "q",
        close = "<C-c>q",
      },
    },
    -- https://dev.neovim.pro/lspsaga/diagnostic/
    diagnostic = {
      show_code_action = true,
      jump_num_shortcut = true,
      max_width = 0.5,
      max_height = 0.6,
      text_hl_follow = true,
      border_follow = true,
      extend_relatedInformation = true,
      show_layout = "float",
      show_normal_height = 10,
      max_show_width = 0.9,
      max_show_height = 0.6,
      diagnostic_only_current = false,
      keys = {
        exec_action = "r",
        quit = "q",
        toggle_or_jump = "<CR>",
        quit_in_show = { "q", "<Esc>" },
      },
    },
    -- https://dev.neovim.pro/lspsaga/finder/
    finder = {
      max_height = 0.5,
      left_width = 0.3,
      right_width = 0.3,
      default = "def+ref+imp",
      methods = {},
      layout = "float",
      filter = {},
      silent = false,
      keys = {
        shuttle = "[]",
        toggle_or_open = "<CR>",
        vsplit = "v",
        split = "s",
        tabe = "t",
        tabnew = "n",
        quit = "q",
        close = "<Esc>",
      },
    },
    -- https://dev.neovim.pro/lspsaga/hover/
    hover = {
      max_width = 0.3,
      max_height = 0.7,
      open_link = "gl",
      open_cmd = "!chrome",
    },
    -- https://dev.neovim.pro/lspsaga/implement/
    implement = {
      enable = true,
      sign = true,
      virtual_text = false,
      priority = 100,
    },
    -- https://dev.neovim.pro/lspsaga/lightbulb/
    lightbulb = {
      enable = false,
      debounce = 10,
      sign_priority = 20,
    },
    -- https://dev.neovim.pro/lspsaga/outline/
    outline = {
      win_position = "right",
      win_width = 30,
      auto_preview = false,
      detail = false,
      auto_close = true,
      close_after_jump = true,
      layout = "normal",
      max_height = 0.5,
      left_width = 0.3,
      keys = {
        toggle_or_jump = "<CR>",
        quit = "q",
        jump = "o",
      },
    },
    -- https://dev.neovim.pro/lspsaga/rename/
    rename = {
      in_select = false,
      auto_save = false,
      project_max_width = 0.5,
      project_max_height = 0.5,
      keys = {
        quit = "<C-c>",
        exec = "<CR>",
        select = "x",
      },
    },
    -- https://dev.neovim.pro/lspsaga/misc/#beacon
    beacon = {
      enable = true,
      frequency = 12,
    },
  }
end
